# -*- coding: utf-8 -*-
import json
import re
from openai import OpenAI
from industryClassLib import allIndustryClass3, allPartIndustryClass3
from mysqlIndustryClass import mysqlIndustryClass

class agentIndustryClass3QA():
    def __init__(self):
        self.client = OpenAI(api_key="sk-de3197a618e3436f8a76b482a17da844", base_url="https://api.deepseek.com/beta")
        # sk-de3197a618e3436f8a76b482a17da844
    def run(self, companyName, product, business, industry, annotationDict, checkLableList):
        # 输入整理
        if not product:
            product = "未提及"
        if not business:
            business = "未提及"
        if not industry:
            industry = "未提及"
        annotation = ""
        for k,v in annotationDict.items():
            if annotation:
                annotation += "\n"
            annotation += "【%s】%s"%(k,v)
        systemPrompt = """
# 角色
行业标签纠正专家

# 技能
1.具有丰富的行业分析的背景知识；
2.擅长根据提供的公司信息和标签含义，准确的分析出公司业务与待检查标签的匹配性，并纠正标签结果；  

# 公司产品格式
以“;”分割多个产品，每个产品格式为“产品名（产品概述）”，当产品概述不存在时，格式为“产品名”。

# 行业分类标签格式
以“|”依次拼接第一级、第二级、第三级标签，行业细分程度由粗到细，第一级、第二级和第三级都限定了该标签的行业范围和含义。
'行业分类标签解释'中实心方括号【】内为标签名称，后面为该标签的解释。

# 匹配要求
1.**判断标签的匹配性**：根据提供的'公司名称'、'公司产品'、'主营业务'、'主要行业'，结合指定标签的解释，分析标签与公司是否匹配，保留匹配的标签，删除不匹配的标签；
2.必须使用'行业分类标签解释'中的标签，严禁创造新标签。
3.没有匹配的标签时，不需要解释，输出空JSON。

# 输入待检查标签表格式
以“;”分割的行业标签列表，例如：“机械设备与零件|电气设备|电机制造;汽车产业|新能源汽车零部件|新能源动力电池制造”代表标签“机械设备与零件|电气设备|电机制造”和“汽车产业|新能源汽车零部件|新能源动力电池制造”。

# 输出格式
JSON格式，key为“label”，value为“;”分割的行业标签列表，形式为“{"label":"行业标签1;行业标签2"}”，例如：“{"label":"机械设备与零件|电气设备|电机制造;汽车产业|新能源汽车零部件|新能源动力电池制造"}”。

# 指令
1.理解'公司名称'、'公司产品'、'主营业务'、'主要行业'的含义，理解每个'公司产品'是在该含义所涉及的行业范围内的产品；
2.理解'行业分类标签解释'中每个标签的含义；
3.对'待检查标签表'中每个标签，按照'匹配要求'，判断标签的匹配性，保留匹配的标签；
4.按照JSON格式输出保留匹配的标签，请确保输出的内容格式正确和内容准确。

# 示例
# 行业分类标签解释示例
【精密机械|电气设备|电池制造】指生产和组装各种类型电池的专业活动，涵盖从原材料制备到成品电池的全过程，包括锂离子电池、镍氢电池等多种类型的电池制造。
【汽车产业|新能源汽车零部件|新能源动力电池制造】专注于研发和生产电动汽车及其他新能源车辆使用的动力电池，涉及锂离子电池、固态电池等多种类型，是新能源汽车的核心组成部分，对提高能源效率和续航能力有重要影响。
【其他|卫生和社会工作|社会工作】指通过各种社会工作方法和技巧，帮助个人、家庭、群体解决困难，提升生活质量的专业服务领域。它涉及心理辅导、社区发展、社会支持等多个方面，旨在促进社会的和谐与发展。

## 公司名称示例
广州市虎头电池集团股份有限公司

## 公司产品示例
大号碱性电池（持久耐用绿色环保）;五号碱性电池（持久耐用绿色环保）;七号碱性电池（持久耐用绿色环保）;九伏碱性电池（持久耐用绿色环保）;大号高功率电池（燃气炉热水器适用）;五号高功率电池（充足电力美观实用）;汽车蓄电池（汽车电瓶蓄电池免维护）

## 主营业务示例
广州市虎头电池集团股份有限公司是中国干电池行业的骨干企业，拥有自营进出口权，年销售干电池超60亿只，外贸额超4亿美元，其销量、出口量、出口额、业务收入等在中国干电池行业名列前茅，名列中国对非洲出口企业百强榜第7位。公司主要产品有干电池系列、蓄电池系列、电池原材料系列、照明系列、电池用电器具系列、应急电源系列、太阳能系列、运动品系列、日用品系列和食品系列等十大系列的产品。公司致力于提供持久耐用、绿色环保的电池产品，满足各种应用需求，包括家庭、工业和特殊用途。

## 主要行业示例
广州市虎头电池集团股份有限公司属于电池制造行业，专注于干电池和蓄电池的生产与销售。公司在电池行业中具有显著的市场地位和影响力，产品广泛应用于家庭、工业、照明、应急电源等多个领域。公司还涉及电池原材料、电池用电器具、太阳能产品等多个细分行业，是中国对非洲出口企业百强榜中的重要成员。

## 输入示例
精密机械|电气设备|电池制造;汽车产业|新能源汽车零部件|新能源动力电池制造;其他|卫生和社会工作|社会工作

## 输出示例
{"label":"精密机械|电气设备|电池制造;汽车产业|新能源汽车零部件|新能源动力电池制造"}
        """

        words = """
# 行业分类标签解释
%s

# 公司名称
%s

# 公司产品
%s

# 主营业务
%s

# 主要行业
%s

# 待检查标签表
%s

请按照'指令'，按照'匹配要求'，输出保留匹配的标签。""" % (annotation, companyName, product, business, industry, ";".join(checkLableList))
        # print(f'{systemPrompt}')
        # print(f'{words}')
        response = self.client.chat.completions.create(
            model="deepseek-chat",
            messages=[
                {'role': 'system', 'content': f'{systemPrompt}'},
                {'role': 'user', 'content': f'{words}'}],
            temperature=0.1,
            response_format={"type": "json_object"}
        )
        res = {}
        try:
            res = json.loads(response.choices[0].message.content)
            return res
        except Exception as e:
            log = "[ERROR]agentIndustryClassQA.run(%s): %s"%(companyName, e)
            if res:
                self.logs = self.logs + str(res) + "\n"
            self.logs = self.logs + log + "\n"
            return {}

    def check(self, r, annotationDict):
        res = []
        if 'label' in r:
            if r['label']:
                for label in r['label'].split(";"):
                    if label in annotationDict:
                        res.append(label)
                    else:
                        log = "[ERROR]agentIndustryClassQA结果标签幻觉：%s" % (label)
                        self.logs = self.logs + log + "\n"
        else:
            log = "[ERROR]agentIndustryClassQA结果格式错误：%s" % (r)
            self.logs = self.logs + log + "\n"
        return ";".join(res)

    def progress(self, companyName, product, business, industry, annotationDict, checkLableList):
        self.logs = ""
        res = self.run(companyName, product, business, industry, annotationDict, checkLableList)
        res = self.check(res, annotationDict)
        return res, self.logs


if __name__ == "__main__":
    companyName = "宁波聚轩信息科技有限公司"
    product = "轴管通（轴承行业数字化系统）;易紧固（紧固件行业数字化系统）;液压宝（液压行业数字化系统）;大圣SASS云平台;大圣云ERP;大圣云MES;大圣云WMS;大圣机联网系统;供应商协同平台;学习分享平台;大圣PASS云平台;在线表单开发平台;在线报表开发平台;在线大屏开发平台;在线工作流引擎;在线移动端APP开发平台;壁挂式工位机;立式工位机（报工台）;电子看板;手持（PDA）及扫码枪;工业平板;打印机;数采网关"
    business = "宁波聚轩信息科技有限公司专注于制造业数字化管理领域，提供包括ERP、MES、WMS等在内的全面数字化解决方案，致力于帮助中小制造业提升管理水平，提高运营效益，降低制造成本。公司产品涵盖行业数字化系统、云平台、智能硬件等多个领域，通过数据自动化采集、可视化呈现和智能化应用，实现生产过程的精细化管理，提高生产效率和产品质量。"
    industry = "宁波聚轩信息科技有限公司主要涉及信息技术行业，专注于制造业的数字化转型，特别是在工业互联网、智能制造、工业软件开发等领域。公司提供的产品和服务广泛应用于轴承、紧固件、液压、汽车零部件等多个细分行业，帮助企业实现数字化管理和智能化生产。"
    checkLableList = ["新一代信息技术|大数据及云计算|大数据软件开发", "新一代信息技术|信息传输、软件和信息技术服务业|软件和信息技术服务业", "其他|居民服务、修理和其他服务业|机动车、电子产品和日用产品修理业"]
    db = mysqlIndustryClass()
    annotationDict = {}
    for k in checkLableList:
        v = db.getIndustryAnnotation(k)
        annotationDict[k] = v
    agent = agentIndustryClass3QA()
    r,logs = agent.progress(companyName, product, business, industry, annotationDict, checkLableList)
    print(r)
    print(logs)
